iT邦幫忙

2022 iThome 鐵人賽

DAY 15
0

比較運算子

比較運算子的意思就是用運算子前後的兩個值去做比較,然後會回傳為布林值的結果。

運算子 功能 描述 範例(let a = 3) 回傳結果
== 等於(寬鬆) 檢查前後的值是否相等 a == 3 true
=== 等於(嚴謹) 檢查前後的值跟型別是否相等 a === 3 true
!= 不等於(寬鬆) 檢查前後的值是否不相等 a != 3 false
!== 不等於(嚴謹) 檢查前後的值跟型別是否不相等 a !== 3 false
> 大於 檢查前面的值是否大於後面的值 a > 3 false
< 小於 檢查前面的值是否小於後面的值 a < 3 false
>= 大於等於 檢查前面的值是否大於等於後面的值 a >= 3 true
<= 小於等於 檢查前面的值是否小於等於後面的值 a <= 3 true

了解有哪些比較運算子後,我們就可以用它們來做一些判斷:

今天考試,小明考了68分,小華考了59分,他們有沒有及格呢?

let mingScore = 68;
let huaScore = 59;
let passScore = 60;

console.log(mingScore >= passScore); // true 大於60分,有及格
console.log(huaScore >= passScore); // false 沒有大於60分,沒及格
console.log(huaScore < mingScore); // true 小華的分數比小明的分數低
console.log((huaScore + mingScore)/2 >= passScore); // true 小華跟小明的平均分數大於及格分數

由上可知,我們也可以使用變數來做比較,值則可以是數字、字串、物件或是邏輯。

console.log(56 === 56); // true
console.log("hello" === "hello"); // true 也可以用字串來比較
console.log(true === true); // true 布林值也可以

console.log("hello" !== "hello"); // false 
console.log("hello" !== "hi"); // true
console.log(1 !== 2); // true

= 跟 == 跟 === 的差異

  1. =:一個等於 = 是賦予值的意思

    let a = 1; // 賦予變數 a 的值為 1 
    
  2. ==:兩個等於 == 是比較運算子,檢查前後是否相等的意思

    let a = 1;
    let b = 1;
    console.log(a == b); // true
    

    但要特別注意的是兩個等於 == 會協助轉型,在自動轉型的情況下可能會出現下面的例子:

    let a = 1; // 數字型別
    let b = "1"; // 字串型別
    console.log(a == b); // true ???
    

    這是一個弔詭的狀況,明明兩個是不同型別,回傳的結果卻是 true ,這也是為什麼說兩個等於== 是寬鬆的,且現在都不推薦使用。

  3. ===:三個等於 === 也是比較運算子,檢查前後是否相等的意思,但相較於兩個等於 == ,它多了一個型別的條件,也就是說三個等於 === 在比較的同時也會看型別,兩個型別也要一樣才會回傳 true 的結果。

    let a = 1; // 數字型別
    let b = "1"; // 字串型別
    console.log(a === b); // false
    

    比較完型別不正確就會回傳 false,因為這種嚴謹的比較相較起來發生問題的機率小得多,所以現在通常都建議使用三個等於 === 而非兩個等於 ==


邏輯運算子

運算子 功能 描述
&& ( And ) 而且 同時滿足條件(前後都是 true 的狀況)會回傳 true,否則回傳 false
|| ( Or ) 或是 滿足其一條件(前後只要有一個是 true 的狀況)就會回傳 true
! ( Not ) 將後面的布林值轉換為相反的值

以下直接用程式碼來說明:

&&

let apple = 1;
let book = 2;

console.log(apple === 1); //true
console.log(book === 2); //true
console.log( apple === 1 && book === 2); //true
//左側為 true 「且」 右側也為 true,同時滿足兩側為 true,回傳結果 true

console.log(apple === 1); //true
console.log(book === 3); //false
console.log( apple === 1 && book === 3); //false
//不符合左側為 true 「且」 右側也為 true,所以回傳 false

||

同樣的例子如果改為 ||

let apple = 1;
let book = 2;

console.log(apple === 1); //true
console.log(book === 2); //true
console.log( apple === 1 || book === 2); //true
//左側或右側只要其中之一為 true,回傳結果 true

console.log(apple === 1); //true
console.log(book === 3); //false
console.log( apple === 1 || book === 3); //true
//左側為 true,右側為 false,左「或」右其中之一有滿足條件,所以回傳 true

console.log(apple === 2); //false
console.log(book === 3); //false
console.log( apple === 2 || book === 3); //false
//兩側皆為 false,不滿足其中之一為 true 的條件,所以回傳 false

模擬情境

&&:商店有個大禮包,購買的資格為商店的會員,「而且」有在該商店消費 10000 元以上才能參與抽獎(同時滿足兩個條件才能抽獎)

let cost = 11200; //消費 11200 元
let isMember = true; //是會員
console.log(cost >= 10000 && isMember === true); // true

||:商店有個大禮包,購買的資格為商店的會員,「或是」有在該商店消費 10000 元以上就能參與抽獎(只要滿足其中一個條件就能抽獎)

let cost = 19600; //消費 19600 元
let isMember = false; //不是會員
console.log(cost >= 10000 || isMember === true); // true

由於可以使用到的情境非常多,「比較運算子」跟「邏輯運算子」都是之後會很常見到的運算子,希望大家都能更了解它們喔!

參考資料

線上課程
MDN
VBA講義


上一篇
Day14 字串轉數字、數字轉字串
下一篇
Day16 流程判斷 if、else、else if
系列文
從基礎開始,用 JavaScript 從頭建立起程式肌肉 30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言